ARQ を使ってみよう
ノンブロッキング(Non-Blocking)
ARQ は Python3 の asyncio を使用して構築されていて、ジョブの登録と実行をノンブロッキングで処理することが可能です。 asyncioのタスクプールを使用して、複数のジョブ(場合によっては数百)を同時に実行できます。
強力な機能
遅延実行、簡単なジョブの再実行、悲観的実行(pessimistic execution)により、クリティカルなジョブには ARQ が最適なものとなります。
高速
fork しないことと、asyncio による非同期処理により、I/O のない短いジョブの場合、ARQは RQ(Redis Queue) より約7倍速くなります。 I/Oを使用するジョブでは、約40倍速くなる可能性があります。 (実装中) エレガント
開発者が長い間 RQ のコントリビュータであり、ユーザーです。ARQ は、よりシンプルで、より明確で、より強力になるように設計されています。
軽量
ARQ のコードは約700行にしかすぎません。また、大幅に変更されることはありません。
悲観的実行(pessimistic execution)
ジョブが成功もしくは失敗するか、その結果がわかるまでは、該当するジョブは
キューから削除されません。
これにより重要なジョブがロストすることを防いでいます。
反面、ジョブは複数回実行される可能性があります。
ワーカーがシャットダウンするとジョブはすぐにキャンセルされ、
ワーカーが再起動したとき(または、実行中の別のワーカーによって)、
キューに残っているジョブを再度実行します。
RQ や Celeryなどは、ワーカーがシャットダウンしたときにジョブが再実行されません。